/**
 * 
 */
package com.naiterui.ehp.bp.domain;

import static javax.persistence.GenerationType.IDENTITY;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.*;

/**
 * 咨询会话表

 * @since 2.0.0
 */
@Entity
@Table(name = "consult_session")
public class ConsultSession implements Serializable {

    // ------------- 是否含推药记录 -------------//
    /**
     * 问诊有推药记录：<code>CONSULT_HAVE_RECOM</code>
     */
    public static final int HAVE_RECOM = 1;
    /**
     * 问诊不含推荐记录：<code>CONSULT_HAVE_NOT_RECOM</code>
     */
    public static final int HAVE_NOT_RECOM = 0;

    // ------------- 会话消费类型枚举 -------------- //
    /**
     * 问诊消费类型-免费：<code>COST_TYPE_FREE</code>
     */
    public static final int COST_TYPE_FREE = 0;
    /**
     * 问诊消费类型-收费：<code>COST_TYPE_PAY</code>
     */
    public static final int COST_TYPE_PAY = 1;

    // ------------- 会话发起方类型 --------------- //
    /**
     * 会话发起方类型-患者发起：<code>CHAT_RELATION_FROM_PT</code>
     */
    public static final int CHAT_RELATION_FROM_PT = 0;

    /**
     * 会话发起方类型-医生发起：<code>CHAT_RELATION_FROM_DR</code>
     */
    public static final int CHAT_RELATION_FROM_DR = 1;

    /**
     * 已评价：<code>HAVE_COMMENT</code>
     */
    public static final int HAVE_COMMENT = 1;
    /**
     * 未评价：<code>HAVE_NOT_COMMENT</code>
     */
    public static final int HAVE_NOT_COMMENT = 0;

    /**
     * 会话状态-待接诊
     */
    public static final int SESSION_STATUS_MISSED = 1;
    /**
     * 会话状态-已接诊
     */
    public static final int SESSION_STATUS_RECEIVED = 2;
    /**
     * 会话状态-已结束
     */
    public static final int SESSION_STATUS_OVER = 3;
    /**
     * 会话状态-未回复
     */
    public static final int SESSION_STATUS_UNANSWERED = 4;

    /**
     * 字段或域定义：<code>serialVersionUID</code>
     */
    private static final long serialVersionUID = -982974754138107877L;

    /**
     * 主键：<code>id</code>
     */
    private Long id;
    /**
     * 咨询会话id：<code>sessionId</code>
     */
    private String sessionId;
    /**
     * 账单id：<code>billId</code>
     */
    private Long billId;
    /**
     * 医生id：<code>doctorId</code>
     */
    private Long doctorId;
    /**
     * 患者id：<code>patientId</code>
     */
    private Long patientId;

    /**
     * 就诊人id
     */
    private Long inquirerId;
    /**
     * 开始时间：<code>startTime</code>
     */
    private Date startTime;
    /**
     * 结束时间：<code>endTime</code>
     */
    private Date endTime;
    /**
     * 会话关系。0：患者发起；1：医生发起：<code>realtion</code>
     */
    private Integer relation;
    /**
     * 消费类型，0：免费；1：收费：<code>costType</code>
     */
    private Integer costType;
    /**
     * 推药标签，0：不含；1：含：<code>recomDrugFlag</code>
     */
    private Integer recomDrugFlag;
    /**
     * 费用，单位：分：<code>cost</code>
     */
    private Integer cost;

    /**
     * 评价状态。0：未评价；1：已评价：<code>commnetStatus</code>
     */
    private Integer commnetStatus;

    /**
     * 会话状态，1:未接诊;2:已接诊;3:已结束;4:未回复
     */
    private Integer sessionStatus;

    /**
     * @return Long 取得域 id 的方法。
     */
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Long getId() {
        return id;
    }

    /**
     * @param id 对域 id 的设置方法.
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return Long 取得域 sessionId 的方法。
     */
    @Column(name = "session_id")
    public String getSessionId() {
        return sessionId;
    }

    /**
     * @param sessionId 对域 sessionId 的设置方法.
     */
    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }

    /**
     * @return Long 取得域 billId 的方法。
     */
    @Column(name = "bill_id")
    public Long getBillId() {
        return billId;
    }

    /**
     * @param billId 对域 billId 的设置方法.
     */
    public void setBillId(Long billId) {
        this.billId = billId;
    }

    /**
     * @return Long 取得域 doctorId 的方法。
     */
    @Column(name = "doctor_id")
    public Long getDoctorId() {
        return doctorId;
    }

    /**
     * @param doctorId 对域 doctorId 的设置方法.
     */
    public void setDoctorId(Long doctorId) {
        this.doctorId = doctorId;
    }

    /**
     * @return Long 取得域 patientId 的方法。
     */
    @Column(name = "patient_id")
    public Long getPatientId() {
        return patientId;
    }

    /**
     * @param patientId 对域 patientId 的设置方法.
     */
    public void setPatientId(Long patientId) {
        this.patientId = patientId;
    }

    @Column(name = "inquirer_id")
    public Long getInquirerId() {
        return inquirerId;
    }

    public void setInquirerId(Long inquirerId) {
        this.inquirerId = inquirerId;
    }

    /**
     * @return Long 取得域 startTime 的方法。
     */
    @Column(name = "start_time")
    public Date getStartTime() {
        return startTime;
    }

    /**
     * @param startTime 对域 startTime 的设置方法.
     */
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    /**
     * @return Long 取得域 endTime 的方法。
     */
    @Column(name = "end_time")
    public Date getEndTime() {
        return endTime;
    }

    /**
     * @param endTime 对域 endTime 的设置方法.
     */
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    /**
     * @return Integer 取得域 realtion 的方法。
     */
    @Column(name = "relation")
    public Integer getRelation() {
        return relation;
    }

    /**
     * @param realtion 对域 realtion 的设置方法.
     */
    public void setRelation(Integer relation) {
        this.relation = relation;
    }

    /**
     * @return Integer 取得域 costType 的方法。
     */
    @Column(name = "cost_type")
    public Integer getCostType() {
        return costType;
    }

    /**
     * @param costType 对域 costType 的设置方法.
     */
    public void setCostType(Integer costType) {
        this.costType = costType;
    }

    /**
     * @return Integer 取得域 recomDrugFlag 的方法。
     */
    @Column(name = "recom_drug_flag")
    public Integer getRecomDrugFlag() {
        return recomDrugFlag;
    }

    /**
     * @param recomDrugFlag 对域 recomDrugFlag 的设置方法.
     */
    public void setRecomDrugFlag(Integer recomDrugFlag) {
        this.recomDrugFlag = recomDrugFlag;
    }

    /**
     * @return Integer 取得域 cost 的方法。
     */
    @Column(name = "cost")
    public Integer getCost() {
        return cost;
    }

    /**
     * @param cost 对域 cost 的设置方法.
     */
    public void setCost(Integer cost) {
        this.cost = cost;
    }

    /**
     * @return Integer 取得域 commnetStatus 的方法。
     */
    @Column(name = "comment_status")
    public Integer getCommnetStatus() {
        return commnetStatus;
    }

    /**
     * @param commnetStatus 对域 commnetStatus 的设置方法.
     */
    public void setCommnetStatus(Integer commnetStatus) {
        this.commnetStatus = commnetStatus;
    }

    @Column(name = "session_status")
    public Integer getSessionStatus() {
        return sessionStatus;
    }

    public void setSessionStatus(Integer sessionStatus) {
        this.sessionStatus = sessionStatus;
    }

    @Override
    public String toString() {
        return "ConsultSession{" + "id=" + id + ", sessionId='" + sessionId + '\'' + ", billId=" + billId + ", doctorId="
                + doctorId + ", patientId=" + patientId + ", startTime=" + startTime + ", endTime=" + endTime + ", relation="
                + relation + ", costType=" + costType + ", recomDrugFlag=" + recomDrugFlag + ", cost=" + cost + ", commnetStatus="
                + commnetStatus + '}';
    }
}